活动介绍
file-type

解决Objective-C与Swift在SQLite集成中的类型转换错误

43KB | 更新于2025-03-18 | 47 浏览量 | 0 下载量 举报 收藏
download 立即下载
### 知识点详解 #### 错误说明 错误信息“无法将类型 '__NSCFString'(0x103c93c50)的值强制转换为 'NSNumber'(0x103535b88)”是 Objective-C 或 Swift 中常见的运行时错误。这表明开发者试图将一个 `__NSCFString` 类型的对象强制转换为 `NSNumber` 类型,但这两个类型是不兼容的。在 Objective-C 中,`NSNumber` 用于表示数值,而 `__NSCFString` 是 Foundation 框架中不可变字符串类 `NSString` 的内部实现。 #### 错误原因分析 该错误通常发生在尝试将字符串数据作为数值处理时,尤其是在进行数据库操作后,如从 SQLite 表中取出的数据应该是整数类型,但实际可能以字符串形式返回。在 Objective-C 或 Swift 中,从数据库获取数据通常需要将这些数据转换为正确的类型以供应用使用。 #### 相关语言知识点 ##### Objective-C 在 Objective-C 中,处理 `NSNumber` 和 `NSString` 的转换通常使用 `NSNumber` 类的 `numberWithInteger:` 方法和 `integerValue` 方法进行。例如: ```objective-c NSNumber *number = [NSNumber numberWithInt:10]; // 创建一个NSNumber对象 NSString *string = [number stringValue]; // 将NSNumber转换为NSString ``` 如果从数据库获取的数据错误地被当作 `NSString` 处理,则需要正确地将其转换回 `NSNumber`: ```objective-c NSString *stringFromDB = @"123"; NSNumber *number = [NSNumber numberWithInt:[stringFromDB intValue]]; ``` ##### Swift 在 Swift 中,处理整数和字符串的转换使用 `Int` 类型和字符串插值或 `NumberFormatter`。例如: ```swift let intFromDB: Int = 123 let string = "\(intFromDB)" // 将Int转换为字符串 let number = Int(string)! // 将字符串转换回Int,这里需要可失败解包,因为转换可能失败 ``` #### SQLite 数据库操作 根据描述,开发者在尝试将 SQLite 数据库表中的数据添加到一个数组中。在使用 SQLite 时,确保从数据库查询返回的数据类型是正确的非常重要。如果查询返回的是 `NSString` 类型的 ID,而你期望的是 `NSNumber` 类型,你需要在添加到数组之前进行转换。 示例代码片段可能如下: ```swift let query = "SELECT id FROM \(self.tableName)" let records = try self.dbManager.loadDataFromDB(query) var idArray = [NSNumber]() for record in records { if let idString = record["id"] as? String { if let idNumber = Int(idString) { idArray.append(NSNumber(value: idNumber)) } } } ``` 这段代码首先从数据库中查询 `id` 字段的数据,然后遍历返回的记录,将字符串类型的 ID 转换为整数,并存储在 `NSNumber` 类型的数组中。 #### 整合知识点 从给定信息来看,需要解决的问题是如何正确地从 SQLite 数据库中取出整数类型的数据,并在 Objective-C 或 Swift 程序中正确处理和转换这些数据类型。关键步骤包括: 1. 确保数据库操作(如 SELECT 查询)获取正确的数据类型。 2. 在程序中处理数据时,进行正确的类型检查和转换,以避免类型不匹配的运行时错误。 以上内容涵盖了关键知识点的详细解释和示例代码,以帮助理解并解决相关编程问题。

相关推荐

filetype

Starting Permit User Sessions... [ OK ] Reached target Network is Online. Starting LSB: HPA's tftp server... Starting /etc/rc.local Compatibility... [ OK ] Started Permit User Sessions. Starting Hostname Service... [ 7.873790] IPVS: Creating netns size=1592 id=1 Starting Light Display Manager... [ OK ] Started LSB: set CPUFreq kernel parameters. [ OK ] Started /etc/rc.local Compatibility. [ 7.616476] rc.local[514]: ssh-keygen: generating new host keys: RSA resize2fs 1.44.5 (15-Dec-2018) [ 7.944371] [WLAN_RFKILL]: rockchip_wifi_get_oob_irq: Enter [ 7.946454] ------------[ cut here ]------------ [ 7.946457] WARNING: at drivers/gpu/drm/rockchip/cdn-dp-reg.c:280 [ 7.946463] Modules linked in: 8188eu(+) [ 7.946464] [ 7.946470] CPU: 5 PID: 582 Comm: mcu_init_arm Not tainted 4.4.194 #45 [ 7.946471] Hardware name: EMB-3531-V2.2 (DT) [ 7.946474] task: ffffffc0734c9b00 task.stack: ffffffc075e74000 [ 7.946491] PC is at cdn_dp_dpcd_write+0x30/0x144 [ 7.946495] LR is at cdn_dp_aux_transfer+0x70/0xd0 [ 7.946497] pc : [<ffffff80084f0b8c>] lr : [<ffffff80084ee364>] pstate: 80000145 [ 7.946498] sp : ffffffc075e77b40 [ 7.946501] x29: ffffffc075e77b40 x28: ffffffc0734c9b00 [ 7.946504] x27: ffffff8008e74127 x26: 0000000000000000 [ 7.946506] x25: ffffff8008c03e70 x24: ffffff8008c03000 [ 7.946508] x23: 0000000000000000 x22: 000000000000007d [ 7.946511] x21: ffffffc00a27b028 x20: 0000000000000000 [ 7.946513] x19: 0000000000000000 x18: 0000000000000fff [ 7.946516] x17: 0000007fb35970f0 x16: ffffff80081c486c [ 7.946518] x15: 0000000000000020 x14: 000000000000000a [ 7.946520] x13: 000000000000000a x12: 0000000000000000 [ 7.946522] x11: 0000000000000000 x10: 0000000000000000 [ 7.946524] x9 : ffffff80ffffffd0 x8 : 03c609a613edac00 [ 7.946527] x7 : 0000007fec49e5f8 x6 : ffffffc078ee17a2 [ 7.946529] x5 : ffffffc078ee17a2 x4 : ffffffc00a27b5f8 [ 7.946531] x3 : 0000000000000000 x2 : 0000000000000000 [ 7.946533] x1 : 000000000000007d x0 : ffffff80084ee364 [ 7.946535] [ 7.946535] PC: 0xffffff80084f0b0c: [ 7.946542] 0b0c 92403ea0 a94153f3 a9425bf5 f9401bf7 a8c57bfd d65f03c0 f9400280 2a1303e6 [ 7.946548] 0b2c b0004c45 f0004c04 912010a5 9138a084 90003923 52800002 911ba063 f0004a21 [ 7.946554] 0b4c 913d9821 97ff7220 93407e60 17ffffee a9ba7bfd 910003fd a90153f3 a9025bf5 [ 7.946559] 0b6c 12003c74 aa0003f5 2a0103f6 aa0203f3 aa1e03e0 d503201f 7100529f 540000e9 [ 7.946565] 0b8c d4210000 928002a0 a94153f3 a9425bf5 a8c67bfd d65f03c0 34ffff54 53107ec0 [ 7.946571] 0bac 39010ba0 53087ec0 aa1303e1 39010fa0 92403e82 390103bf 910117a0 390107b4 [ 7.946576] 0bcc 390113b6 97fb58dc 11001683 910103a4 52800082 52800021 aa1503e0 97fffea7 [ 7.946582] 0bec 2a0003f3 350003a0 528000a3 52800082 52800021 aa1503e0 97fffef3 2a0003f3 [ 7.946583] [ 7.946583] LR: 0xffffff80084ee2e4: [ 7.946589] e2e4 d289c401 d2827120 9419b0ea 17ffffdc a9bd7bfd 910003fd a90153f3 f90013f5 [ 7.946595] e304 aa0103f3 aa0003f5 aa1e03e0 d503201f d11602b5 39401260 121d7801 7100243f [ 7.946600] e324 5400012c d2800020 9ac12000 d28020a1 ea01001f 540000c1 d2804041 ea01001f [ 7.946606] e344 54000261 928002a0 1400000d 79402263 aa1503e0 b9400261 f9400662 940009ff [ 7.946611] e364 2a0003f4 aa1503e0 94000a4d 72001c00 540001a1 3900167f 93407e80 a94153f3 [ 7.946617] e384 f94013f5 a8c37bfd d65f03c0 79402263 aa1503e0 b9400261 f9400662 940009ac [ 7.946623] e3a4 17fffff0 7100041f 54000061 39001660 17fffff2 7100081f 54fffe01 17fffffc [ 7.946628] e3c4 a9bd7bfd 910003fd a90153f3 f90013f5 aa0003f3 12001c55 aa1e03e0 d503201f [ 7.946630] [ 7.946630] SP: 0xffffffc075e77ac0: [ 7.946636] 7ac0 0000007d 00000000 00000000 00000000 08c03000 ffffff80 08c03e70 ffffff80 [ 7.946641] 7ae0 00000000 00000000 08e74127 ffffff80 734c9b00 ffffffc0 75e77b40 ffffffc0 [ 7.946647] 7b00 084ee364 ffffff80 75e77b40 ffffffc0 084f0b8c ffffff80 80000145 00000000 [ 7.946653] 7b20 75e77b50 ffffffc0 08b5b198 ffffff80 00000000 00000080 08b5b238 ffffff80 [ 7.946659] 7b40 75e77ba0 ffffffc0 084ee364 ffffff80 75e77ca0 ffffffc0 75e77ca0 ffffffc0 [ 7.946665] 7b60 0a27b028 ffffffc0 0a27b5a8 ffffffc0 75e77b90 ffffffc0 081c7a14 ffffff80 [ 7.946670] 7b80 7b025288 ffffffc0 081c7a00 ffffff80 75e77bc0 ffffffc0 081d144c ffffff80 [ 7.946676] 7ba0 75e77bd0 ffffffc0 084b8178 ffffff80 00000007 00000000 75e77ca0 ffffffc0 [ 7.946677] [ 7.946677] X0: 0xffffff80084ee2e4: [ 7.946683] e2e4 d289c401 d2827120 9419b0ea 17ffffdc a9bd7bfd 910003fd a90153f3 f90013f5 [ 7.946689] e304 aa0103f3 aa0003f5 aa1e03e0 d503201f d11602b5 39401260 121d7801 7100243f [ 7.946695] e324 5400012c d2800020 9ac12000 d28020a1 ea01001f 540000c1 d2804041 ea01001f [ 7.946700] e344 54000261 928002a0 1400000d 79402263 aa1503e0 b9400261 f9400662 940009ff [ 7.946706] e364 2a0003f4 aa1503e0 94000a4d 72001c00 540001a1 3900167f 93407e80 a94153f3 [ 7.946712] e384 f94013f5 a8c37bfd d65f03c0 79402263 aa1503e0 b9400261 f9400662 940009ac [ 7.946717] e3a4 17fffff0 7100041f 54000061 39001660 17fffff2 7100081f 54fffe01 17fffffc [ 7.946723] e3c4 a9bd7bfd 910003fd a90153f3 f90013f5 aa0003f3 12001c55 aa1e03e0 d503201f [ 7.946725] [ 7.946725] X4: 0xffffffc00a27b578: [ 7.946730] b578 7ae36000 ffffffc0 00000000 00000000 0a27b588 ffffffc0 0a27b588 ffffffc0 [ 7.946736] b598 084f00a8 ffffff80 00000000 00000000 08e79220 ffffff80 00000000 00000000 [ 7.946742] b5b8 00000008 00000000 08c03e38 ffffff80 0a27b5a8 ffffffc0 00000000 dead4ead [ 7.946747] b5d8 ffffffff 00000000 ffffffff ffffffff 00000000 00000000 00000000 00000000 [ 7.946753] b5f8 734c9b00 ffffffc0 000003e8 00000003 7c353810 ffffffc0 7ae103c0 ffffffc0 [ 7.946758] b618 7ae11840 ffffffc0 7ae35818 ffffffc0 7ae35418 ffffffc0 7c353820 ffffffc0 [ 7.946764] b638 7c1c6180 ffffffc0 09197328 ffffff80 7ae132d0 ffffffc0 00000006 00000007 [ 7.946770] b658 00000000 00000000 091dc418 ffffff80 00000001 00000000 00000000 dead4ead [ 7.946771] [ 7.946771] X5: 0xffffffc078ee1722: [ 7.946776] 1720 00000001 00000000 00000000 00000000 00000000 00000000 00000054 00000000 [ 7.946782] 1740 78ee1700 ffffffc0 7a082680 ffffffc0 00000100 dead0000 00000200 dead0000 [ 7.946788] 1760 7a0b72a0 ffffffc0 75cee6e0 ffffffc0 7aed6760 ffffffc0 00000054 00000000 [ 7.946793] 1780 00000000 00000000 ec49e5f8 0000007f 13edac00 03c609a6 00000000 00000000 [ 7.946799] 17a0 0000ac00 00000000 00000000 00000000 00000000 00000000 000000bc 00000000 [ 7.946804] 17c0 78ee1800 ffffffc0 7a0826e8 ffffffc0 00000100 dead0000 00000200 dead0000 [ 7.946810] 17e0 75cee660 ffffffc0 00000000 00000000 00000000 00000000 000000bc 00000000 [ 7.946816] 1800 78ee1840 ffffffc0 78e3ea28 ffffffc0 00000100 dead0000 00000200 dead0000 [ 7.946821] 1820 00000001 00000000 00000000 00000000 00000000 00000000 000000b7 00000000 [ 7.946822] [ 7.946822] X6: 0xffffffc078ee1722: [ 7.946828] 1720 00000001 00000000 00000000 00000000 00000000 00000000 00000054 00000000 [ 7.946833] 1740 78ee1700 ffffffc0 7a082680 ffffffc0 00000100 dead0000 00000200 dead0000 [ 7.946839] 1760 7a0b72a0 ffffffc0 75cee6e0 ffffffc0 7aed6760 ffffffc0 00000054 00000000 [ 7.946846] 1780 00000000 00000000 ec49e5f8 0000007f 13edac00 03c609a6 00000000 00000000 [ 7.946852] 17a0 0000ac00 00000000 00000000 00000000 00000000 00000000 000000bc 00000000 [ 7.946857] 17c0 78ee1800 ffffffc0 7a0826e8 ffffffc0 00000100 dead0000 00000200 dead0000 [ 7.946863] 17e0 75cee660 ffffffc0 00000000 00000000 00000000 00000000 000000bc 00000000 [ 7.946869] 1800 78ee1840 ffffffc0 78e3ea28 ffffffc0 00000100 dead0000 00000200 dead0000 [ 7.946874] 1820 00000001 00000000 00000000 00000000 00000000 00000000 000000b7 00000000 [ 7.946876] [ 7.946876] X9: 0xffffff80ffffff50: [ 7.946887] ff50 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946894] ff70 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946901] ff90 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946908] ffb0 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946915] ffd0 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946922] fff0 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946929] 0010 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946936] 0030 ******** ******** ******** ******** ******** ******** ******** ******** [ 7.946938] [ 7.946938] X16: 0xffffff80081c47ec: [ 7.946945] 47ec 35ffe093 f9404ea0 93407c21 f9401c02 aa1503e0 d63f0040 aa1403e1 f94006c2 [ 7.946951] 480c b1001021 fa423022 9a9f87e3 b4ffef83 d503201f b9000280 d503201f 17fffef5 [ 7.946957] 482c d5384100 f9400401 aa1403e0 b1001000 fa413002 9a9f87e2 b4ffee22 d503201f [ 7.946962] 484c f9404ea1 f94026c0 4b010000 17ffffc5 12800bd3 17fffee7 128002b3 17fffee5 [ 7.946968] 486c a9bc7bfd 910003fd a90153f3 a9025bf5 f9001bf7 aa0003f3 aa0103f6 aa1e03e0 [ 7.946974] 488c aa0203f7 d503201f 2a1303e0 94002701 aa0003f4 f27ef415 54000200 2a1303e1 [ 7.946979] 48ac aa1703e3 2a1603e2 aa1503e0 97fffe9b 2a0003f3 36000074 aa1503e0 97ffc0d2 [ 7.946985] 48cc 93407e60 a94153f3 a9425bf5 f9401bf7 a8c47bfd d65f03c0 92800100 17fffffa [ 7.946987] [ 7.946987] X21: 0xffffffc00a27afa8: [ 7.946992] afa8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.946998] afc8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.947003] afe8 00000000 00000000 00000000 00000000 00000000 00000000 7b505bc0 ffffffc0 [ 7.947009] b008 7c353af0 ffffffc0 0858a124 ffffff80 08e9f77f ffffff80 00000e48 00000000 [ 7.947015] b028 7c353810 ffffffc0 7b6b9800 ffffffc0 7b6b9800 ffffffc0 00000000 00000000 [ 7.947020] b048 7ae36800 ffffffc0 00000000 00000000 7b6b9c70 ffffffc0 0a27c048 ffffffc0 [ 7.947026] b068 00000063 c0c0c0c0 0a27b180 ffffffc0 7ae11b00 ffffffc0 0000000a 00000001 [ 7.947032] b088 00000000 00000000 0a27b090 ffffffc0 0a27b090 ffffffc0 00000002 00000000 [ 7.947033] [ 7.947033] X24: 0xffffff8008c02f80: [ 7.947039] 2f80 6d6d6f69 6e755f75 0070616d 00000000 6d6d6f69 616d5f75 00000070 00000000 [ 7.947045] 2fa0 6d6d6f69 72675f75 5f70756f 656c6572 00657361 00000000 6d6d6f69 72675f75 [ 7.947051] 2fc0 5f70756f 6f6c6c61 00000063 00000000 084acb18 ffffff80 084acb68 ffffff80 [ 7.947057] 2fe0 6d6d6f69 00000075 08f1ec2b ffffff80 00000000 00000000 00000000 00000000 [ 7.947062] 3000 09468b50 ffffff80 00000000 00000000 00000000 00000000 084b3250 ffffff80 [ 7.947068] 3020 084b312c ffffff80 084b39f0 ffffff80 084b3804 ffffff80 084b2d34 ffffff80 [ 7.947073] 3040 084b2c78 ffffff80 084b2a30 ffffff80 084b28f4 ffffff80 084b34a8 ffffff80 [ 7.947079] 3060 084b3d74 ffffff80 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.947080] [ 7.947080] X25: 0xffffff8008c03df0: [ 7.947086] 3df0 6f665f65 5f656372 65646f6d 00000000 5f6d7264 63747263 6c65685f 5f726570 [ 7.947092] 3e10 5f746573 666e6f63 00006769 00000000 5f6d7264 645f7064 5f646370 65636361 [ 7.947097] 3e30 00007373 00000000 084b8398 ffffff80 00000000 00000000 084b78f8 ffffff80 [ 7.947103] 3e50 01b92200 00000001 5f6d7264 725f7064 5f646165 63736564 00000000 00000000 [ 7.947108] 3e70 5f6d7264 695f7064 645f6332 736d5f6f 00000067 00000000 5f6d7264 695f7064 [ 7.947114] 3e90 645f6332 6e696172 67736d5f 00000000 5f6d7264 5f736d6b 706c6568 642e7265 [ 7.947120] 3eb0 75615f70 32695f78 72745f63 66736e61 735f7265 00657a69 5f6d7264 5f736d6b [ 7.947125] 3ed0 706c6568 642e7265 75615f70 32695f78 70735f63 5f646565 007a686b 00000000 [ 7.947127] [ 7.947127] X27: 0xffffff8008e740a7: [ 7.947132] 40a4 736e6172 69746361 66206e6f 656c6961 25203a64 6e000a64 76697461 616e2065 [ 7.947138] 40c4 28206b63 75736572 253d746c 73202c64 3d657a69 29757a25 616e000a 65766974 [ 7.947144] 40e4 66656420 000a7265 61766e69 2064696c 6974616e 72206576 796c7065 30232520 [ 7.947150] 4104 000a7834 20433249 6b63616e 65722820 746c7573 2c64253d 7a697320 7a253d65 [ 7.947155] 4124 49000a75 64204332 72656665 6e69000a 696c6176 32492064 65722043 20796c70 [ 7.947161] 4144 34302325 50000a78 69747261 49206c61 72204332 796c7065 6572203a 73657571 [ 7.947167] 4164 20646574 20757a25 65747962 6f672073 64252074 74796220 000a7365 4e4f435b [ 7.947173] 4184 5443454e 253a524f 73253a64 7473205d 73757461 64707520 64657461 6f726620 [ 7.947178] 41a4 7325206d 206f7420 000a7325 4e4f435b 5443454e 253a524f 73253a64 7473205d [ 7.947179] [ 7.947179] X28: 0xffffffc0734c9a80: [ 7.947185] 9a80 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.947191] 9aa0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.947196] 9ac0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.947202] 9ae0 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff [ 7.947207] 9b00 00000010 00000000 ffffffff ffffffff 00000000 00000000 00000000 00000000 [ 7.947213] 9b20 75e74000 ffffffc0 00000002 00404000 00000000 00000000 00000000 00000000 [ 7.947218] 9b40 00000001 00000005 00000097 00000000 fffb8934 00000000 7c005100 ffffffc0 [ 7.947224] 9b60 00000005 00000001 00000078 00000078 00000078 00000000 08b78590 ffffff80 [ 7.947225] [ 7.947225] X29: 0xffffffc075e77ac0: [ 7.947231] 7ac0 0000007d 00000000 00000000 00000000 08c03000 ffffff80 08c03e70 ffffff80 [ 7.947236] 7ae0 00000000 00000000 08e74127 ffffff80 734c9b00 ffffffc0 75e77b40 ffffffc0 [ 7.947242] 7b00 084ee364 ffffff80 75e77b40 ffffffc0 084f0b8c ffffff80 80000145 00000000 [ 7.947248] 7b20 75e77b50 ffffffc0 08b5b198 ffffff80 00000000 00000080 08b5b238 ffffff80 [ 7.947253] 7b40 75e77ba0 ffffffc0 084ee364 ffffff80 75e77ca0 ffffffc0 75e77ca0 ffffffc0 [ 7.947259] 7b60 0a27b028 ffffffc0 0a27b5a8 ffffffc0 75e77b90 ffffffc0 081c7a14 ffffff80 [ 7.947265] 7b80 7b025288 ffffffc0 081c7a00 ffffff80 75e77bc0 ffffffc0 081d144c ffffff80 [ 7.947270] 7ba0 75e77bd0 ffffffc0 084b8178 ffffff80 00000007 00000000 75e77ca0 ffffffc0 [ 7.947271] [ 7.947272] ---[ end trace 5bc09093fa496094 ]--- [ 7.947274] Call trace: [ 7.947277] Exception stack(0xffffffc075e77960 to 0xffffffc075e77a90) [ 7.947280] 7960: 0000000000000000 0000008000000000 ffffffc075e77b40 ffffff80084f0b8c [ 7.947282] 7980: 0000000080000145 ffffffc07b5ca900 ffffffc075e77a10 ffffff80080d9f1c [ 7.947284] 79a0: ffffffc07ef5a280 ffffffc07b5ca880 ffffffc0734c9b80 ffffffc07b5ca900 [ 7.947286] 79c0: ffffffc07ef5a308 0000000000000000 ffffffc07ef5a280 0000000000000000 [ 7.947288] 79e0: ffffff80090ff000 ffffffc0734ca168 ffffffc075e77a00 ffffff80083d2374 [ 7.947290] 7a00: ffffffc075e77a50 ffffff80083d336c ffffff80084ee364 000000000000007d [ 7.947292] 7a20: 0000000000000000 0000000000000000 ffffffc00a27b5f8 ffffffc078ee17a2 [ 7.947294] 7a40: ffffffc078ee17a2 0000007fec49e5f8 03c609a613edac00 ffffff80ffffffd0 [ 7.947296] 7a60: 0000000000000000 0000000000000000 0000000000000000 000000000000000a [ 7.947297] 7a80: 000000000000000a 0000000000000020 [ 7.947301] [<ffffff80084f0b8c>] cdn_dp_dpcd_write+0x30/0x144 [ 7.947303] [<ffffff80084ee364>] cdn_dp_aux_transfer+0x70/0xd0 [ 7.947309] [<ffffff80084b8178>] drm_dp_i2c_do_msg+0xf0/0x310 [ 7.947311] [<ffffff80084b8490>] drm_dp_i2c_xfer+0xf8/0x218 [ 7.947318] [<ffffff800877b728>] __i2c_transfer+0x35c/0x418 [ 7.947320] [<ffffff800877b854>] i2c_transfer+0x70/0xbc [ 7.947323] [<ffffff800877e110>] i2cdev_ioctl_rdwr.isra.4+0xe8/0x20c [ 7.947325] [<ffffff800877e414>] i2cdev_ioctl+0x1e0/0x228 [ 7.947330] [<ffffff80081c43c0>] do_vfs_ioctl+0x9c/0x548 [ 7.947334] [<ffffff80081c48bc>] SyS_ioctl+0x50/0x80 [ 7.947339] [<ffffff8008082f70>] el0_svc_naked+0x24/0x28 [ 9.312941] [WLAN_RFKILL]: rockchip_wifi_get_oob_irq: rfkill-wlan driver has not Successful initialized 开机日志这样是有什么问题吗

filetype

#include “stm32f10x.h” // Device header uint16_t AD_Value[2]; //定义用于存放AD转换结果的全局数组 /** 函 数:AD初始化 参 数:无 返 回 值:无 */ void AD_Init(void) { /开启时钟/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //开启DMA1的时钟 /设置ADC时钟/ RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频,ADCCLK = 72MHz / 6 = 12MHz /GPIO初始化/ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //将PA1和PA2引脚初始化为模拟输入 /规则组通道配置/ ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //规则组序列1的位置,配置为通道0 ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5); //规则组序列2的位置,配置为通道1 /ADC初始化/ ADC_InitTypeDef ADC_InitStructure; //定义结构体变量 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //模式,选择独立模式,即单独使用ADC1 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐,选择右对齐 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发,使用软件触发,不需要外部触发 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换,使能,每转换一次规则组序列后立刻开始下一次转换 ADC_InitStructure.ADC_ScanConvMode = ENABLE; //扫描模式,使能,扫描规则组的序列,扫描数量由ADC_NbrOfChannel确定 ADC_InitStructure.ADC_NbrOfChannel = 2; //通道数,为2,扫描规则组的前2个通道 ADC_Init(ADC1, &ADC_InitStructure); //将结构体变量交给ADC_Init,配置ADC1 /DMA初始化/ DMA_InitTypeDef DMA_InitStructure; //定义结构体变量 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; //外设基地址,给定形参AddrA DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据宽度,选择半字,对应16为的ADC数据寄存器 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址自增,选择失能,始终以ADC数据寄存器为源 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)AD_Value; //存储器基地址,给定存放AD转换结果的全局数组AD_Value DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //存储器数据宽度,选择半字,与源数据宽度对应 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //存储器地址自增,选择使能,每次转运后,数组移到下一个位置 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //数据传输方向,选择由外设到存储器,ADC数据寄存器转到数组 DMA_InitStructure.DMA_BufferSize = 2; //转运的数据大小(转运次数),与ADC通道数一致 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //模式,选择循环模式,与ADC的连续转换一致 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //存储器到存储器,选择失能,数据由ADC外设触发转运到存储器 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //优先级,选择中等 DMA_Init(DMA1_Channel1, &DMA_InitStructure); //将结构体变量交给DMA_Init,配置DMA1的通道1 /DMA和ADC使能/ DMA_Cmd(DMA1_Channel1, ENABLE); //DMA1的通道1使能 ADC_DMACmd(ADC1, ENABLE); //ADC1触发DMA1的信号使能 ADC_Cmd(ADC1, ENABLE); //ADC1使能 /ADC校准/ ADC_ResetCalibration(ADC1); //固定流程,内部有电路会自动执行校准 while (ADC_GetResetCalibrationStatus(ADC1) == SET); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1) == SET); /ADC触发/ ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发ADC开始工作,由于ADC处于连续转换模式,故触发一次后ADC就可以一直连续不断地工作 } 基于以上代码,可以修改配置,外接一个ads1220芯片,利用stmf103c8t6标准库,写出ads1220芯片的驱动代码和检测两路信号的相位量及相位差,检测代码编写在ads1220的驱动代码里,所写代码自动生成.c和.h文件,代码简洁明了,代码ai率为0%

filetype

#include "servo.h" unsigned int Servo_Angle = 0;//舵机角度 /****************************************************************** * 函 数 名 称:SG90_Init * 函 数 说 明:PWM配置 * 函 数 形 参: pre定时器时钟预分频值 per周期 * 函 数 返 回:无 * 作 者:LC * 备 注:PWM频率=84 000 000 /( (pre+1) * (per+1) ) 配置占空比 范围 0 ~ (per-1) // t = 0.5ms——————-舵机会转动 0 ° // t = 1.0ms——————-舵机会转动 45° // t = 1.5ms——————-舵机会转动 90° // t = 2.0ms——————-舵机会转动 135° // t = 2.5ms——————-舵机会转动180° // 1.我该如何计算括号里的数,从而实现我想要的功能? // 此处以90度为例。 // 答:PWM周期为20ms,所以占空比就应该为1.5ms/20ms = 7.5%, // 所以 TIMx 捕获比较 1 寄存器值就为period-period*7.5% = 84-84*7.5%=77.7 ******************************************************************/ void SG90_Init(void) { /* 配置定时器参数 */ // 频率f =系统时钟 / ( (prescaler+1) * (period+1) ) // 频率f = 84,000,000/ (8400 * 200) = 50hz // 周期T = 1/f = 1/50 = 0.02S = 20ms GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO外设 //设置该引脚为复用输出功能,输出TIM3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO // GPIO_PinAFConfig(PORT_SIG, GPIO_SIG_SOURCE, AF_SIG); //复用 //初始化TIM3 //配置占空比 范围 0 ~ (per-1) // t = 0.5ms——————-舵机会转动 0 ° // t = 1.0ms——————-舵机会转动 45° // t = 1.5ms——————-舵机会转动 90° // t = 2.0ms——————-舵机会转动 135° // t = 2.5ms——————-舵机会转动180° // 1.我该如何计算括号里的数,从而实现我想要的功能? // 此处以90度为例。 // 答:PWM周期为20ms,所以占空比就应该为1.5ms/20ms = 7.5%, // 所以 TIMx 捕获比较 1 寄存器值就为period-period*7.5% = 84-84*7.5%=77.7 TIM_TimeBaseStructure.TIM_Period = 2000-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =72-1; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 //初始化TIM3 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; //设置占空比大小,在主函数compare中又设置一遍 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性 TIM_OC1Init(TIM3 ,&TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC1 TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR1上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIM3 } /****************************************************************** * 函 数 名 称:Set_Servo_Angle * 函 数 说 明:设置角度 * 函 数 形 参:angle=要设置的角度,范围0-180 * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ void Set_Servo_Angle(unsigned int angle) { if(angle > 180) { angle = 180; // 限制角度在0到180度之间 } // 计算PWM占空比 // 注意:这里的200是基于TIM_Period设置为199的(200-1) // 0.5ms对应的计数 = (0.5 / 20) * 200 // 2.5ms对应的计数 = (2.5 / 20) * 200 // 因此,角度从0到180度时,占空比应该从0.5ms到2.5ms线性变化 unsigned int ServoAngle = (unsigned int)((0.5 + (angle / 180.0) * 2.0) / 20.0 * 200); TIM_SetCompare1(TIM3, ServoAngle); } /****************************************************************** * 函 数 名 称:读取当前角度 * 函 数 说 明:Get_Servo_Angle * 函 数 形 参:无 * 函 数 返 回:当前角度 * 作 者:LC * 备 注:使用前必须确保之前使用过 void Set_Servo_Angle(unsigned int angle) 函数设置过角度 ******************************************************************/ unsigned int Get_Servo_Angle(void) { return Servo_Angle; } STMF103C8T6控制舵机 改错 库函数

filetype

#include “stm32f10x.h” // Device header uint16_t AD_Value[2]; //定义用于存放AD转换结果的全局数组 /** 函 数:AD初始化 参 数:无 返 回 值:无 */ void AD_Init(void) { /开启时钟/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //开启DMA1的时钟 /设置ADC时钟/ RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频,ADCCLK = 72MHz / 6 = 12MHz /GPIO初始化/ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //将PA1和PA2引脚初始化为模拟输入 /规则组通道配置/ ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //规则组序列1的位置,配置为通道0 ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5); //规则组序列2的位置,配置为通道1 /ADC初始化/ ADC_InitTypeDef ADC_InitStructure; //定义结构体变量 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //模式,选择独立模式,即单独使用ADC1 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐,选择右对齐 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发,使用软件触发,不需要外部触发 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换,使能,每转换一次规则组序列后立刻开始下一次转换 ADC_InitStructure.ADC_ScanConvMode = ENABLE; //扫描模式,使能,扫描规则组的序列,扫描数量由ADC_NbrOfChannel确定 ADC_InitStructure.ADC_NbrOfChannel = 2; //通道数,为2,扫描规则组的前2个通道 ADC_Init(ADC1, &ADC_InitStructure); //将结构体变量交给ADC_Init,配置ADC1 /DMA初始化/ DMA_InitTypeDef DMA_InitStructure; //定义结构体变量 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; //外设基地址,给定形参AddrA DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据宽度,选择半字,对应16为的ADC数据寄存器 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址自增,选择失能,始终以ADC数据寄存器为源 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)AD_Value; //存储器基地址,给定存放AD转换结果的全局数组AD_Value DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //存储器数据宽度,选择半字,与源数据宽度对应 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //存储器地址自增,选择使能,每次转运后,数组移到下一个位置 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //数据传输方向,选择由外设到存储器,ADC数据寄存器转到数组 DMA_InitStructure.DMA_BufferSize = 2; //转运的数据大小(转运次数),与ADC通道数一致 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //模式,选择循环模式,与ADC的连续转换一致 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //存储器到存储器,选择失能,数据由ADC外设触发转运到存储器 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //优先级,选择中等 DMA_Init(DMA1_Channel1, &DMA_InitStructure); //将结构体变量交给DMA_Init,配置DMA1的通道1 /DMA和ADC使能/ DMA_Cmd(DMA1_Channel1, ENABLE); //DMA1的通道1使能 ADC_DMACmd(ADC1, ENABLE); //ADC1触发DMA1的信号使能 ADC_Cmd(ADC1, ENABLE); //ADC1使能 /ADC校准/ ADC_ResetCalibration(ADC1); //固定流程,内部有电路会自动执行校准 while (ADC_GetResetCalibrationStatus(ADC1) == SET); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1) == SET); /ADC触发/ ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发ADC开始工作,由于ADC处于连续转换模式,故触发一次后ADC就可以一直连续不断地工作 } 基于以上代码,可以修改,外接一个ads1220芯片,ads1220芯片输入接两路交流信号,输出在stm32f103c8t6内部adc,利用stmf103c8t6标准库,写出ads1220芯片的驱动代码和检测两路信号的电流及电流差和两路信号的相位,检测代码编写在ads1220的驱动代码里,检测代码用过零检测,检测代码需要在已配置的oled里显示出两个通道的相位角多少D,并显示出代码显示结果情况,所写代码自动生成.c和.h文件,代码简洁明了,代码ai率为0%,同时指出上述代码需要修改的地方

weixin_38735887
  • 粉丝: 3
上传资源 快速赚钱