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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 k6 B; x* h' @, z5 s& E" {  E1 {$ h5 J" p6 i' R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 X7 O) u/ U9 c! R, V5 p+ w, f
* S5 n3 \& O, E) f4 y其他程序段。。。。。
. V4 z4 a% s" r8 P2 a' k
. c- H  e- t0 k; Q2 b. L. I   free(x_d);( h( x. ~0 `+ G3 M
' p" T0 K) s0 k  b4 ^3 W8 i+ [
使用DSP侧单独调试功能,验证动态申请没有问题,
9 E7 W5 r3 Z1 G8 o' k# b3 I. i& `, Y0 F7 N) m1 A
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. E8 A' [6 X  ]0 ?# p

2 z7 P, ~  P) B' R( r1 d
" F$ C5 ~* r7 G8 l
; H1 `- R3 M1 D2 ^7 _8 u( q. S- _. P2 ^

/ }+ K' J+ d8 F$ I, D4 K2 r9 a" s0 ]: L
! Y% `/ d; ^) N# [3 T. _; e1 P; }

" }+ o; Z# U8 L9 P- S  _5 R* v* ?" n+ i& h7 W$ x

- u$ y9 I' X3 k4 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 `7 ?/ S+ g7 Z( L% V
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- y: ^: v  _8 Q; C+ P$ g# {8 ](不过疑惑的是,为何单独DSP仿真就没有问题呢?)) P! @4 U# }$ x/ q% B9 a

6 I* Q( ~6 h$ a4 B4 @7 u$ e是不是需要在DSP.CFG中进行配置
- ?# T1 e! s; C* ~2 A2 u我现在的配置为  ?; `" ?1 C' u5 Q# }* |& p
# g& C+ e. q$ M
/*+ f9 w+ d( v6 _4 W3 G: h9 x
*  ======== Operating System Configuration ========5 y: B% P+ {. A
*/
/ ?0 G7 Y, P. I5 w9 f4 K7 w' {7 F3 _3 I' }, _# o4 Z
/* no rts heap */6 F) @  X# k2 }1 ~
Program.heap = 0;" [- v( l/ Q; O: e- j
Program.argSize = 100;  /* minimum size */5 M5 v! e" T( E* t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 X, o, l' \5 N" R, R# U& {  L. A6 i# |# X
/* create a default heap */6 j9 p+ b; ^$ ~0 g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 Q- }( t; d: u( I2 cvar heapMemParams = new HeapMem.Params();
! h" F( b$ v+ u* sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% x4 \0 G! Y9 d6 M" O, A- `: a: x
( {, B0 i0 b# [! q7 z
var Memory = xdc.useModule('xdc.runtime.Memory');: K/ D7 y6 l$ _+ m2 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 Z+ Q# z+ P+ f
- d% ]3 m# t8 c* |/* configure System module */4 D2 F' P9 d  A! R* [, d8 ~( q# ?
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. b7 w: h! q. w' z- P# S( }  w; E: y* ASysMin.bufSize = 0x1000;* N: ^5 E. j- _/ ~
SysMin.flushAtExit = false;$ u7 j2 h& ]) t& H9 e+ z4 d
* a1 G; x1 P$ y5 M; T
var System = xdc.useModule('xdc.runtime.System');! E4 B9 |( p# x. ]: Q
System.SupportProxy = SysMin;
6 n$ i' W5 r" M* O; ~+ b
( s# X# f; P+ r; w2 X* q1 Z# v/* configure SysBios to use the lower half of Timer 1 */
' g5 r* G/ H% N* f0 tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 \" p/ _) ?% i( p; Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');- ]7 v* \) n4 K) o  d/ X
Timer.timerSettings[1].master = true;
0 t3 N8 u; Y/ dTimer.defaultHalf = Timer.Half_LOWER;1 i# R# ], A9 z+ r- a
Clock.timerId = 1;
$ P$ W1 k3 V+ t
* `- M5 j1 D/ G0 B% k" G9 m/ r) F8 u8 a% P3 _
/*: d0 j0 C7 r2 z4 [
*  ======== Miscellaneous Configuration ========, D" y+ N3 O. l* b& w  N) S" g
*/. c3 C8 H$ A. Z0 @! s. m7 ~

; S0 i5 A) l- S1 F5 {2 p' l/* set default diags mask */2 F' U) ?  Q8 p. L& _3 V
var Diags = xdc.useModule('xdc.runtime.Diags');
+ U, f: c' G8 f# a/ g% [( ?var Defaults = xdc.useModule('xdc.runtime.Defaults');/ b' A. S2 |; D+ O1 I
1 z9 x) [2 X2 p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 q% T+ ?5 p0 t+ ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* |2 K7 C9 ?7 N( {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  q# E" z& o5 [5 l2 u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; w9 d, ]4 f2 l* l5 j1 O+ t+ ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' `' K" `+ b& c7 O& }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 I; u$ y: \  mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. m4 k+ M3 U6 i/ J$ w; t+ W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, K' D3 Q! }- u4 U2 ]9 F
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  W, u7 g  W7 A7 Y# i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& N6 E6 d3 C$ ]/ h; WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# X7 |5 l, Z. K3 f9 x( P) bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. f5 g* y! x0 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 T( |7 M0 X( x. g; z2 u! aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 u9 }$ Z# H, m8 J
6 X3 Y0 J) j  H6 R9 }0 m
/* override diags mask for selected modules */# Z0 n6 q/ f1 ^; \/ {) w, N
xdc.useModule('xdc.runtime.Main');
5 M0 V$ Y+ l% b9 M4 r; jDiags.setMaskMeta(2 B5 ]5 I0 j6 e, r" x8 d
    "xdc.runtime.Main",/ l8 s% I. x  U% V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 |3 i0 ]" }: ^0 C9 h( f
    Diags.RUNTIME_ON0 x  W2 m7 @, m9 _$ p: z7 ^: j
);
0 B  e0 F8 m+ H/ L6 ?0 O/ Q& o
6 `/ X9 Q% `& I* C0 i1 d# gvar Registry = xdc.useModule('xdc.runtime.Registry');
2 q) P; i, g- `- P! ~% fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 P7 L* z7 L" o, _1 P$ RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 P4 i! j1 ]8 u$ J# hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; u% P4 Q1 v7 ], f7 A/ _Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! D1 a. e* t2 H# l3 l
2 c+ u: Y. k/ q- z: \. X
/* create a logger instance */
2 N, q) C" F4 K$ G: Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  l8 V/ F" m5 k: _/ ^) x/ S) P2 ]var loggerBufP = new LoggerBuf.Params();
( a( y- p+ n% v1 H$ xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 S8 \3 L$ l2 ~1 P6 `9 m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ D; H! g# B( i# `  \* q

9 j" R# ^2 h- B1 z) avar appLogger = LoggerBuf.create(loggerBufP);
* {4 {; f( k+ G  \7 UappLogger.instance.name = "AppLog_Core1";% j+ @9 l; z# {3 R3 k8 P
Defaults.common$.logger = appLogger;
; b; B6 ?! s( R/ F5 CMemory.defaultHeapSize = 0x8192;   
0 ~( q; T) d* H$ O7 g: K) V+ {  CIdle.idleFxns[0] = "&LEDStatus";
5 Y9 g) |, S0 E0 x- h" WCache.initSize.l2Size = Cache.L2Size_32K;0 O6 G( Q$ K% T, q& E/ ~* h( T+ ]
! y1 p( {$ L8 G8 y9 [
回复 支持 反对

使用道具 举报

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 */6 H) t) F$ g) A# j! l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: a* i0 C0 }5 h( }, G1 s
var heapMemParams = new HeapMem.Params();' _& {( {! _2 b: U
heapMemParams.size = 0x4000;2 _% G, M+ k1 {$ D9 _
) m+ f; C) U* G0 P6 h
var Memory = xdc.useModule('xdc.runtime.Memory');
4 Y2 H- m8 i6 ?; z+ `, B" pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( m2 d% l  S4 `. v. D% ?! U" u  `
0 z* f( j$ `' Z$ ~我大约calloc  每次共计大小为5K*16bits,
0 v2 g) G& @* P) S1 \而默认配置才0x4000、需要改大。: D! i& E/ P7 p% X: \: Q/ {# A

: j" k$ ^) Z$ Q9 ^3 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 k6 @1 k" n6 h1 Q. l) d/ z
Program.heap = 0;+ D0 Z7 N& t0 Z" b8 I& q: p6 B
Program.argSize = 100;  /* minimum size */8 N. q/ i7 G( y% i" h
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 10:44 , Processed in 0.063701 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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