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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. I) H) l, Q( D2 {" c% ^$ @& V# p1 `3 b8 S2 d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ r( n. p. E* R% h$ s9 a3 m
6 F$ R$ A; X! n9 `9 k+ h7 r4 ^
其他程序段。。。。。
6 R% s5 N7 r$ Y. Q' ~ 6 h) S! C3 D4 _! A
   free(x_d);- E5 X( O  P" C4 k( }* b/ r
& i& `# g+ b  s! r0 f- D# w
使用DSP侧单独调试功能,验证动态申请没有问题,
" D6 t+ C* s0 {$ e. {7 |
; t# j9 o' }' m0 `4 O, w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 @8 x. G; k6 u# J6 [

% W4 z; ~( o8 }, C" @  q/ ?* V
0 B, l/ g" D8 K4 l0 z) `7 n' K0 }( l2 r

. D/ J0 q) A3 {: Y
" e  ?( ]0 F+ H* b9 X4 \7 Y4 ~. j6 [' k4 x: R# K. m- f

* Q5 M) m" O7 n9 }) K9 B1 r' Q! e7 j" d5 i) _$ ^8 A( A4 N9 P' O  Z

( {' M8 t3 v' C, U( D- o. b" D  `
. C/ K4 |3 _6 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& i8 v1 {+ U! P1 r4 X, B$ |
Program.heap = 0;
2 B+ ^* e/ @) q' \4 Q9 sProgram.argSize = 100;  /* minimum size */
4 o5 I1 [' }" [) s) WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
+ L& f5 P- i- S4 a" L- Evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ ]# X4 H! v8 {: ?3 l+ d+ U
var heapMemParams = new HeapMem.Params();( `- q, ^) g  m. v! D$ L  b
heapMemParams.size = 0x4000;
$ P6 W$ z' L4 M* q) i9 z2 V. T. f3 E& E% G1 ?5 T
var Memory = xdc.useModule('xdc.runtime.Memory');
% P9 q; I8 ^' qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, `7 T: j8 D2 t( V
/ O5 x/ P) Q  H: Z* B我大约calloc  每次共计大小为5K*16bits,
9 ^/ f* c+ K3 U, t: Q而默认配置才0x4000、需要改大。
" \- R, U' ~* a6 g( S* k$ h. c  V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' b+ f% ~1 r3 \0 g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! ^! b; U* ^3 I6 U. T$ L; m(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: Z" r# c, O+ h3 u1 N% c4 y, C

+ c: K% h. P& F* W! D是不是需要在DSP.CFG中进行配置1 Q, _+ O6 y* @, Q
我现在的配置为. G- S5 Z, l3 o! k9 H

9 [0 ?. R5 J1 Y1 h2 B7 V: x/*( F6 h, f2 T" g. q! a* y" v( w$ T
*  ======== Operating System Configuration ========
2 E$ w4 B& e+ ~7 B- u4 h9 q */
2 T" \  r5 w. {( G& A! p* F% P. O" M/ l2 X( W% |
/* no rts heap */
5 G9 H1 K4 U% |2 P1 X% L' G8 pProgram.heap = 0;. i' I! Z' F0 T' `9 ~! ~. P# G
Program.argSize = 100;  /* minimum size */2 r4 B$ B5 Q  ?% Q- U, Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) B/ E+ j4 w) l9 v8 y' ?6 y

5 K; ^9 \. I4 A" e' R" P/* create a default heap */
+ v( y" ]" b* Q* kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 a7 [3 L/ p: b: G8 D
var heapMemParams = new HeapMem.Params();- ]) K) F: f& O- u- w( y) ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& U! }7 z' T/ R6 U+ @
+ h& Z+ n6 I- a: i
var Memory = xdc.useModule('xdc.runtime.Memory');
+ r$ M" l9 w. Y: E6 @6 B) oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% e9 l" B1 Q/ g+ x' ~. u

& x- l" u4 x/ d: O* Y( T/* configure System module */0 E/ m: k/ P6 c1 N  U3 p1 u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 I2 r7 I  m6 W. X& ySysMin.bufSize = 0x1000;! t5 c" ~& D/ S
SysMin.flushAtExit = false;. P2 [( ~5 e! h+ Q$ J5 Y

) u4 L- _1 A- v* E0 t4 Pvar System = xdc.useModule('xdc.runtime.System');& h- Q4 r8 O1 L
System.SupportProxy = SysMin;
# `" }; n. }; e5 [. A# n: K, G8 p0 j
/* configure SysBios to use the lower half of Timer 1 */6 v. \! Y' u! ?3 U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 D0 L( c# @9 q8 x3 ?- P: @6 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  O4 _2 z& u! V' nTimer.timerSettings[1].master = true;% Q+ Z' e# L7 T/ h$ l8 ?
Timer.defaultHalf = Timer.Half_LOWER;
: S7 g. S; W# @! z$ \Clock.timerId = 1;4 s+ S, ]7 \, s) i7 n" }
, G6 `9 e, h# U/ V  h: I/ I* q

1 w  d' W# g' y# `9 C/*% w  r, ]7 j3 s1 R, D/ _
*  ======== Miscellaneous Configuration ========
9 w; ~; Z1 o: _# K& v2 w */
1 {% ^! z  a' Q6 s8 R3 j' L5 \4 N6 Z, l" `
/* set default diags mask */
$ `3 [) P0 b3 J1 Svar Diags = xdc.useModule('xdc.runtime.Diags');- a/ d! o/ V# i  }: R& t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 ~" t4 b$ }- I+ B. h9 M; }" A' C% S; k
+ T4 j! c2 I" d: d. xDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ U9 U, `, I5 }! o+ X4 H* \5 B! sDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 E) z1 ]: d% g2 @! n/ h. O; g! CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! m+ b+ ~* G6 LDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. q' }- h. ^( j  JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 h) a9 g/ b% \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! A7 L: }) t: C) qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 A) D1 c. B1 }. a# s3 N* L5 I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& M" I9 C, L3 A/ V+ E# Q8 o$ V( {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; ?* c/ }6 F( c0 X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! k4 C3 P' J) C4 {, xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" H' e2 ?  S9 v# qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 U! r( K( X1 [$ eDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: g; R& F8 [0 o7 h# @' C7 Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# g4 {" ~2 b* I/ O% n7 X

) u+ ]( q" A/ z1 z/* override diags mask for selected modules */
: O1 G2 a) }1 B, z0 lxdc.useModule('xdc.runtime.Main');
' l" |9 ]( k- k" Y! uDiags.setMaskMeta(
# U  r0 ]1 q: A7 p& ]( Z    "xdc.runtime.Main",3 r% f) |4 J  j9 ]7 w- U4 u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 }- ~9 F8 z' j6 Y    Diags.RUNTIME_ON* }4 e7 H$ s. ~& p& |
);- T+ ^& ^1 k, R# T( Z; \
  z3 ]) ?: c- S/ E
var Registry = xdc.useModule('xdc.runtime.Registry');! _( d3 U4 v% Y  c2 X& K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! K7 i, s6 S6 K# u. }3 IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 D; |, r* B) R! }8 P" A" {( w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% f" T4 G* S' m  \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) }, D# n+ J% v1 E

" Q. O0 I; Z! A+ C4 N/* create a logger instance */
; w8 O9 |3 S5 L9 [4 U# _$ uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, x" ~' H! Z  E# l- u6 R( Jvar loggerBufP = new LoggerBuf.Params();
& k1 z, }# E$ k  [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; |; }1 k& n3 d( {# _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' S4 r* _& M- E; Z2 h# P6 N& p
6 J6 @9 @# V- G4 k  `) k
var appLogger = LoggerBuf.create(loggerBufP);1 |/ J/ Y8 ^- ^8 h2 k
appLogger.instance.name = "AppLog_Core1";, S2 {% w0 x! N1 N! G! ^" c& O
Defaults.common$.logger = appLogger;
* |$ K: q" W% i/ B9 kMemory.defaultHeapSize = 0x8192;   
4 J8 P  @, v2 K8 CIdle.idleFxns[0] = "&LEDStatus";6 Z" Z; n* [" k& b, [9 j. c
Cache.initSize.l2Size = Cache.L2Size_32K;
; v, g5 _/ a7 \8 R0 u. t7 C& `! U: r1 f. B, ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-1 04:00 , Processed in 0.062694 second(s), 33 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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