关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8122|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 T0 m0 q* @3 n0 y0 ^# h  e
8 |# @5 @9 @2 ?, J# [! ^; q! j
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 ?% m2 j/ i  L' m3 f; f

' z. l, L) K" P7 B2 J其他程序段。。。。。( W3 f2 m( v  S6 s- r/ u" F
( k) b5 S7 s# w! \. x' m
   free(x_d);
4 q  l3 f' C9 S. n" ?2 `: s3 u% K8 i1 l( m# a  _
使用DSP侧单独调试功能,验证动态申请没有问题,
; @" f; W: {- j' l2 m9 ^" C7 p7 f
$ t+ k! z3 q9 X& e& ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 A' B% L0 A3 E, O) h3 C: d- X' z* Z1 i

8 g4 n5 M' }9 b' @! \8 T$ y5 W  K, R, ]7 F% y% }

- @2 {& h* s2 g; Y/ b8 x, C6 F/ l, G; \0 ^" ]" P0 r

) z5 E% ~8 h& z9 x* [
0 b# u! E9 y. @- n9 O9 c  N
- [5 p6 x% ^8 K0 s' f
: ]# d; E+ \0 Q  X1 g) r4 Z
- j9 `4 E/ o2 h, L8 _* b2 K2 G6 x$ o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 u1 G. A) t% _7 o1 O1 W) ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' E( v& J! o& H2 R4 O' g% K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" F  S& ?, T. m/ g% \1 Z4 K* m
. e* ]2 J) A6 V
是不是需要在DSP.CFG中进行配置, c, y: N; b: i+ u* V
我现在的配置为
1 }3 m) b! x9 I/ P# b% ~2 Y5 |& U2 x9 t4 S% ?
/*
% }4 x3 y5 `1 a9 a( Z% q *  ======== Operating System Configuration ========" f' C4 E9 r5 a0 K' U
*/
  P5 G+ b! F/ ^3 j9 }6 w* f9 z  X
/* no rts heap */* P2 d7 |& A& F2 n5 x/ ?. P' p
Program.heap = 0;9 |, p4 V4 B7 L& U- x5 J/ j2 x7 {
Program.argSize = 100;  /* minimum size */
; T& H5 x6 ?+ E# b6 zProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 R% _3 [$ d1 z8 p. |
6 s, A2 F) Y  K+ a8 u/* create a default heap */2 Q# C9 f5 ]5 F! F! X6 V% b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 ~  z% a: G1 ^7 c3 X! n( U& S
var heapMemParams = new HeapMem.Params();
  }) q$ B" j, D+ c  {7 `heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) o! H8 C* Z6 o( z6 M+ Y6 R  |2 T$ d4 U
var Memory = xdc.useModule('xdc.runtime.Memory');* P0 h0 L" _# m0 O/ y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ Y# h' T. T5 F) M- v& t0 q% b5 E
% S/ J9 t- {* Z( E0 N7 {
/* configure System module */
, z+ d0 V& e3 s; D. J+ lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- N$ o7 y7 A  w7 LSysMin.bufSize = 0x1000;
1 h3 u/ V  i( R4 H8 e% mSysMin.flushAtExit = false;. T$ t9 r7 ?8 c! ^

4 ]$ B' L) G2 hvar System = xdc.useModule('xdc.runtime.System');
; ~* v, U0 `4 @$ k) C' TSystem.SupportProxy = SysMin;  v1 ~; T4 R, K8 N

' j& N5 t7 A) X6 D" q7 u/* configure SysBios to use the lower half of Timer 1 */; S( Q  Z0 M8 d) q. ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 f; s$ q7 T9 P# A6 U. R5 f" c" ~- i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! Q: c& n8 s4 d2 C- vTimer.timerSettings[1].master = true;
7 ?* `7 Y0 y3 e7 U- ^Timer.defaultHalf = Timer.Half_LOWER;# m0 o& N4 N) I% N1 L4 I
Clock.timerId = 1;
! I1 d3 C: r$ b
6 @: D. I- J8 Z8 n
0 l1 r( m( y4 k1 o, h- [/*$ U' B' \7 |* _2 u4 n
*  ======== Miscellaneous Configuration ========) j9 c+ k. X! o$ F+ @0 o& t
*/
- V& z+ p. z! w- z% ^4 Z4 K, q0 [: E
/* set default diags mask */
2 W: j( B! ~) \' ?9 C4 S/ B3 Y8 nvar Diags = xdc.useModule('xdc.runtime.Diags');
2 F. S- c" K8 a" f% r% p" pvar Defaults = xdc.useModule('xdc.runtime.Defaults');- u2 M) H8 E% h7 C! Q

9 Z! N0 A+ Q5 l0 [5 _9 {" e0 j/ FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" }$ x+ z+ P: d9 |9 q0 h0 MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; t$ o  A% o# u$ [" l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 X0 ]; K4 L5 a7 B1 w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 D4 U/ j, @/ pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. Z. O; `- G. f) |7 v& j/ gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& p5 B9 i+ }7 c' b" pDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ l& |$ L& O8 a, e- }Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# H$ [) i9 \3 _) WDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) h0 \* s8 v6 [8 E7 R6 cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! O; R$ |" K3 R1 WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 D/ i/ Y, y$ @: p9 _3 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 Y3 j1 ~# Z. e0 }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 Z# f% e+ [3 a$ ^( B% n  a1 b0 YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 A/ d( G$ a0 ?1 R2 \
5 G# |* y7 J4 S
/* override diags mask for selected modules */+ n. f2 H( N' W6 F
xdc.useModule('xdc.runtime.Main');
8 ^9 `9 x) {; L7 {2 J& zDiags.setMaskMeta(4 {0 J" [9 d: O* \0 j- U" G* E
    "xdc.runtime.Main",5 P! y" G% y( v9 g- j0 `: `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- u5 ?6 L6 E' l3 [9 ]! S" F5 j    Diags.RUNTIME_ON; G0 _& A; U) h8 H8 a0 ]3 f
);
0 i$ v8 G& B' _) z4 [1 p7 S: [7 _5 F& K( T0 q" y
var Registry = xdc.useModule('xdc.runtime.Registry');, n6 r4 @4 o2 N( G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  P) S2 v3 {" H- m0 T- v6 {/ W* X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 {6 s' I- ^/ P% r( y* J7 u/ ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 F; G! a9 Z- N4 C  O) Y& HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 C& E2 ~: o. Z3 f% ^
- a/ t4 |) d% t& h; d( J
/* create a logger instance */+ d( c  d7 J' |& v/ V! C
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  o9 @3 J9 N7 T. k6 L1 S+ fvar loggerBufP = new LoggerBuf.Params();
. @  e* q& n  A. F( H) t" k; gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: z/ n! t8 S) z4 U. KloggerBufP.bufType = LoggerBuf.BufType_FIXED;7 W) Q5 A- u5 l0 Y' r/ r" h$ ^

; o( p* m7 l; H$ A1 o: E0 u' Gvar appLogger = LoggerBuf.create(loggerBufP);+ a5 t( ^& T! F( u
appLogger.instance.name = "AppLog_Core1";1 D7 Q1 k( V6 \# ]9 ]  |
Defaults.common$.logger = appLogger;& Q5 C0 c9 U* ~! S8 A( \- b6 w
Memory.defaultHeapSize = 0x8192;    / [0 |+ J6 I5 R% _8 S) J6 H# |
Idle.idleFxns[0] = "&LEDStatus";
+ |$ U, g9 G- e, p- \+ I9 RCache.initSize.l2Size = Cache.L2Size_32K;# J: ]; S; Q. ]
* x) U) K2 \9 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# ~9 z4 o9 Q* w9 D) B$ {" g. `- T4 a3 _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; N' n" G/ [  ~8 `var heapMemParams = new HeapMem.Params();
3 X- Y- ~! L$ A) s$ k$ eheapMemParams.size = 0x4000;
0 m% V1 ]  _' S' c( e; h& z- N- g# H- w+ d
var Memory = xdc.useModule('xdc.runtime.Memory');
7 s' I; y$ h% f- m8 g# EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! _/ n, A& _1 L( K) \3 z' B# F. ~0 S* W0 {/ T! d! e" I
我大约calloc  每次共计大小为5K*16bits,  B; V! E% Q  s" N5 ^
而默认配置才0x4000、需要改大。
2 G& q8 }5 v4 r6 z$ ]9 Y& q! ^4 [8 K1 x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" L% L; l9 e$ W% J3 FProgram.heap = 0;
* a5 E0 `( i% `2 CProgram.argSize = 100;  /* minimum size */; h$ r. U& t" ]# E& \! [5 b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-28 10:02 , Processed in 0.043643 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表