关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 o3 V; ?5 Y" n" [# n5 ?9 g" |$ {' I( E4 U$ U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& ^1 A2 u% @$ h; N* Q* X: R7 [' z) |
/ x. @) I6 j1 z" ^# y. S& o% k其他程序段。。。。。. A9 J* ~1 R6 j7 U

$ y# i+ _* T) k7 M0 m   free(x_d);' j* [3 W7 V+ \
) [1 V* b; e4 T# v( ~6 A' N& s7 R) ~
使用DSP侧单独调试功能,验证动态申请没有问题,
, a% ~* }: T' C1 G- q) ], `2 k" t3 H# B% B/ @+ M; G% r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& n) O- u% l+ H/ J" R3 E

# b& r7 t, n0 X( Z& ?9 Q
9 Z* i. \2 }- D3 y) z. {
0 S, d1 ]% |& B8 Y, q. i9 ^
2 J3 d6 Z4 n: F* {% H( F) c! m/ x* |) l9 Z6 q9 k! n

5 r1 J2 x+ N7 X7 W  y2 S! R: N

; ]+ g* j' Q2 J- }  Z
# j+ X/ v  |' {2 v; c9 z
3 B" D" M5 W% l- A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 x$ N( s  ]" P+ r3 g# m% }* D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; r' N9 r  l( K7 H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. j( {, a( X1 O7 J2 J

5 X; U6 a, b4 |2 s6 a! [是不是需要在DSP.CFG中进行配置
$ N+ I* T- H* _& d" t8 `2 @我现在的配置为
9 q. ], s/ h2 z' |& c
+ [; |8 R5 ~/ o2 Q/*6 W- U4 l7 F* Y. n5 T
*  ======== Operating System Configuration ========( w9 R# @; r; N8 U% J
*/
& q+ K. G& H6 {: F! e
* L$ s- {- s& @9 v: u# S# N+ a* S/* no rts heap */% s) A2 E! d" b# k$ j
Program.heap = 0;
, }" r8 y0 @- D1 {3 [- \Program.argSize = 100;  /* minimum size */9 D2 P: \) z, p' J7 l* L* ?& v5 l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 P' g( U4 G4 R: ]! P+ J9 U- f
/ L# }! u+ E  R$ W7 d% s/* create a default heap */
1 S1 U% P4 [- mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 W! t& u$ w: a) E2 ]4 @var heapMemParams = new HeapMem.Params();4 f& p! O9 R9 H7 E# e
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 C; Y6 P3 I& x+ R% Z! r; J3 B0 L6 Z( D$ h0 O4 \5 l' M
var Memory = xdc.useModule('xdc.runtime.Memory');7 w$ T) E) p1 J; I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 @3 l1 `1 [  _4 b# L) A6 z8 w! O& O# H/ g) ^# j
/* configure System module */' v3 A/ @' w! a
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ p0 Q4 F6 H+ Y# `; y, R
SysMin.bufSize = 0x1000;2 j9 X( c/ M; f2 [3 z/ j. A
SysMin.flushAtExit = false;
0 }8 l* O8 S. d) l2 a" ?+ Z$ |0 T: |& M. J) N
var System = xdc.useModule('xdc.runtime.System');
: T, Z; R4 L/ R& E6 F+ qSystem.SupportProxy = SysMin;( v0 H* `3 l5 E0 k+ K4 U% z

. ]8 [# Y3 `/ L, X4 f/* configure SysBios to use the lower half of Timer 1 */- X  O* l( B2 v# X4 ?
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 n; |3 X2 E' G& f/ Z% U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# w4 O  b+ G8 q8 X4 }' YTimer.timerSettings[1].master = true;
: V/ H1 D; Y4 ?6 YTimer.defaultHalf = Timer.Half_LOWER;
: Q6 K+ N& @, H6 J9 j% U( VClock.timerId = 1;
% g/ J# u4 n2 l+ N1 V. M, b8 f- `6 z" u; B* D) t7 c
2 O4 H( L5 x( S
/*0 c9 p# Z$ G% o3 U+ ^
*  ======== Miscellaneous Configuration ========( Y+ F( w3 [2 J
*/
: f3 V/ A# s- E/ P! E% ~7 A. s1 ~
+ y& V2 d" u: `5 g' S% K8 {/* set default diags mask */8 A7 }3 G* c; i! G
var Diags = xdc.useModule('xdc.runtime.Diags');% s. `* u4 }# M# ^( u' {
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 c) O* }6 I9 U  {
, \( t' c) J' j9 C8 P! V
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 X$ Y; X' X6 T4 F$ `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 V+ g7 l' _6 u5 ~! x1 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; y  F* B" h% V+ hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 k6 {" A9 c7 S, o  Y' O, A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* x/ p, S+ C( X; r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% z; G4 a2 L1 aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 h8 f: e: b  l7 S% ^  M7 L9 C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" _& [6 p+ j' ?* R, z4 SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 A5 l/ K4 W* ^6 {' G3 b. [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 K: Y* O: g' @- u+ I5 P# H: I+ nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) p) W$ N/ h, {2 ~# ^: n$ g" E+ jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ W* T$ ^8 f) x! V1 j) K' b) NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 {0 v: `# `6 [/ K$ G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, |+ k  ^* `) R  n1 R7 S' U4 ?" ?% k) d/ L- i/ ]# U' z: `2 _
/* override diags mask for selected modules */  h- N: X9 X7 f# y5 E; \0 g2 {
xdc.useModule('xdc.runtime.Main');* j' x% ?8 t# X
Diags.setMaskMeta(
$ Q% q! D; ?' j- f$ Z; i    "xdc.runtime.Main",6 G/ L& r! l, d$ r' d1 N+ X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  u/ Y5 @( e7 f& x
    Diags.RUNTIME_ON* G; Z( Q: J( ^; k, Y4 B2 A
);1 H/ }5 |4 ^5 U! C
/ Y" f) C& _2 i0 k
var Registry = xdc.useModule('xdc.runtime.Registry');* e8 _7 R' Y7 F; f7 P' `) z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 Y! R( o" a7 z5 X. A8 @$ P
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% Z+ I/ Y3 r9 U2 _Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 L6 z0 }. t4 t3 ]1 |* \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' E# \/ C; }6 Q' u( u2 R% s
3 j  F$ M, o* [5 c4 F( E$ X) o& |8 u
/* create a logger instance */* N: O$ t: @( Z) j& U2 q0 b  v, U6 f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 b7 ~2 z. ?- @- f  ]+ H
var loggerBufP = new LoggerBuf.Params();  U! h! g" y6 r# Y) i2 L9 z' H9 R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ A, B6 ?$ w  ^4 i/ q: ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;. d2 q* ?" j+ r/ K4 A$ h

7 G6 `2 ]2 o, nvar appLogger = LoggerBuf.create(loggerBufP);
$ p+ R5 f5 p. L4 |; aappLogger.instance.name = "AppLog_Core1";
4 s5 J& ~% r% }' EDefaults.common$.logger = appLogger;7 T" G2 m/ x! t" K9 K7 z
Memory.defaultHeapSize = 0x8192;    & l7 ]- a$ X& l9 _6 @  t3 |
Idle.idleFxns[0] = "&LEDStatus";
, o+ P) {- P7 B1 a2 r5 WCache.initSize.l2Size = Cache.L2Size_32K;
, E* G# c3 v; W3 b) j* Q
4 V% C7 {9 q0 x1 P4 i
回复 支持 反对

使用道具 举报

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 */2 i" x% D- i- A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 P4 ~6 F/ b0 h& f
var heapMemParams = new HeapMem.Params();3 ]9 b( w5 }# a; `6 h
heapMemParams.size = 0x4000;& L) W% \- t/ `
/ ^7 P- |+ H' y1 F
var Memory = xdc.useModule('xdc.runtime.Memory');( {6 }$ Z( \! x  P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 d% A) s8 f- ]' w. v9 N' n6 P& I; @6 D  u
我大约calloc  每次共计大小为5K*16bits,7 D) m8 ?$ K5 }1 a4 R8 ?" O
而默认配置才0x4000、需要改大。
9 e" D3 J+ F( b$ h) [& n, Y
4 Q" ?6 z$ ?7 a7 M7 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. p" J/ J1 f5 N# Y+ L
Program.heap = 0;2 k; k3 z, M, J! s+ q
Program.argSize = 100;  /* minimum size */
7 [* v3 y' t2 Y. z# CProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 22:06 , Processed in 0.042094 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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