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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ h! _4 T3 o3 B9 }, A! _  a+ x$ ^7 F! S# C; q" x  m
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. f, S6 h5 r$ I! W

/ N" N5 l6 H1 C$ h- Z其他程序段。。。。。5 {% b& ]6 R0 W

: ]8 S4 N4 h5 P$ q   free(x_d);: X1 I' f; U) C

( F6 @0 e* J& ~8 Y- a- [使用DSP侧单独调试功能,验证动态申请没有问题,5 j8 k4 y- T2 p2 [

4 `( v; i; M) u* _+ x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 |) ?% U/ U1 n8 b

  t! ]$ H* R  r4 \, c0 d  e2 g8 C( y( J' ^

; `. F3 F, T$ |/ k; E6 ^/ E2 j

; I" [: `9 J6 S$ [
' ?) I( n3 c; E2 m& N, S  X: N7 a6 R4 M4 l9 U4 B
  |3 t( ?$ b! f9 E0 r1 X& F1 {

! p- E- D5 M5 T1 w
1 w% B. U. V1 o/ l: Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ ^+ Y' M' p( r5 K* P- l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ e' U8 b9 v1 B' J) }8 \* e7 M5 H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; A( y% `& ?7 V5 `1 T! Z# w

, |9 Z* F* }. h! w; U# }是不是需要在DSP.CFG中进行配置* z( [, H% @( L" Q
我现在的配置为
& W$ f6 @" _& K2 _  {  l) V* B+ L+ Y5 t  [8 Q
/*
. j! Z% W( ~* H *  ======== Operating System Configuration ========) j$ E; \  ~+ R3 ^' S
*/
( d- h2 Z5 ~' M+ m7 K, a. F
# l% H4 `$ y5 X/* no rts heap */
& |" h! [$ M% Y7 y, W) C7 [Program.heap = 0;+ c" s' e) f( M) k
Program.argSize = 100;  /* minimum size */% ~! Q, v- ]' L2 [+ z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. ^% _" x4 a; L, P3 P
* S+ D% g! g' H" m, E( _" K
/* create a default heap */% ~. c1 A2 m2 g4 u( h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ t  M( N% |( F1 R. y, a: A+ ?3 F, Wvar heapMemParams = new HeapMem.Params();
  M) {9 D) x: ?* pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ ?; R5 N; w: ?% o. q( {" K! M# N1 r* ^$ ^
var Memory = xdc.useModule('xdc.runtime.Memory');. |1 w) r' c, ]/ ~5 n# P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ J$ \4 P, c% S4 {; e: T: ?# r% o0 K7 ~) X# D' v, `; k. e
/* configure System module */
/ C7 o- Q* {  I! Zvar SysMin = xdc.useModule('xdc.runtime.SysMin');1 L2 g/ m; Z7 R+ c5 G6 ~
SysMin.bufSize = 0x1000;
" O% k4 D" x* _  P  PSysMin.flushAtExit = false;, P& m3 _8 `# |/ P
( `. p+ Z! T/ _; Y4 P4 o* u
var System = xdc.useModule('xdc.runtime.System');& r9 y+ f+ v& A0 W. Z
System.SupportProxy = SysMin;
; [, `% R; y: u9 Y, {: ^/ {2 ^' n: R: i8 a6 M+ ]( c& H) e
/* configure SysBios to use the lower half of Timer 1 */  H8 x: {0 p! A! H. W; u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: K3 _. p' W0 ~2 y4 n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 N" B# X# C8 FTimer.timerSettings[1].master = true;+ ~' p( |; g$ z' \1 w. D
Timer.defaultHalf = Timer.Half_LOWER;
3 ]% L0 m& k, W( J& SClock.timerId = 1;
& E3 ?" a; T, \- d
, e0 C0 T, m2 c* ^- ^% z6 P" ^8 A" P% }: F4 o+ J( b
/*
* f8 b. Y2 A/ z8 c4 \ *  ======== Miscellaneous Configuration ========( ?- ^) s8 m* j+ Q. i; u
*/
6 X) t2 q8 h, W, [
# W, k- J+ `* l* z  Z- ~/* set default diags mask */
' q0 @, o& W0 }0 nvar Diags = xdc.useModule('xdc.runtime.Diags');6 f8 Y3 b; L2 t: ]' \3 S7 J
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 ^& `0 B/ O: [! P
6 p/ `* @# O4 i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ q0 i3 e# Q+ @8 l$ M" n5 O0 b
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: t3 i3 k- k% _; z! x( t  z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* I5 F; y8 X5 R1 h: a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" q/ z( t1 {8 K' {. m0 f$ G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# c( V/ u% ?! s* G1 L9 A9 tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 b  `4 Q8 R: K6 W4 w* K. U; V2 YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( |8 i& ~% w6 C" s! c4 T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' c) [2 N/ @7 Y2 @Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 m7 s; |5 d& p3 u# A$ V+ zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 C  t7 G# x# ]# U7 L' `8 t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. p6 I+ e/ T9 [0 R" [; i' y  [! m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 o  }- q7 Y. z* t8 v8 A/ U% m5 ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* O* {! x  N" d4 a
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" Z0 T- u1 i- m& z+ [9 z/ G8 k/ e! E/ f* A2 |, c# N* k( a
/* override diags mask for selected modules */7 j5 @4 t) N( X2 ^" B
xdc.useModule('xdc.runtime.Main');* u; @& |7 R5 b1 Z, B* x
Diags.setMaskMeta(
3 J& [3 O3 o$ V" v, j% B: |    "xdc.runtime.Main",3 R* [: Y2 K4 _" e3 h/ F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 ^3 h$ A; {1 R3 u+ B& |& y    Diags.RUNTIME_ON# w7 `) G; b% r9 M3 S" H/ |" s5 c
);3 K/ w& I7 `# @- |1 C) n

6 |# o4 X1 M/ C$ b$ ], k7 @# X: rvar Registry = xdc.useModule('xdc.runtime.Registry');! I: J6 P( d6 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  c! B/ ~2 r7 \) O/ L& hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 {: H, f" e. v7 k
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: Z: Q2 e) E& H% S1 b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) p( {# G( ]% y0 U, B; @- y- h5 x" W& K$ b, }7 r
/* create a logger instance */
- _4 r/ x' J3 ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; |$ s+ E* {- P; }, I9 Svar loggerBufP = new LoggerBuf.Params();
& p9 @3 O7 Z/ WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; {1 @# Z. E( }! I6 e+ P6 `! \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. O; W+ v& R; M1 @1 X+ [6 Q* t9 O  l( l! a5 Q5 v. L( j
var appLogger = LoggerBuf.create(loggerBufP);5 x6 V) M" ^) U% }: T
appLogger.instance.name = "AppLog_Core1";
" J. Z0 X5 Q- }4 ?Defaults.common$.logger = appLogger;
( o6 Z  \3 `; q: v' uMemory.defaultHeapSize = 0x8192;   
0 l# \0 X9 b" JIdle.idleFxns[0] = "&LEDStatus";
$ E8 B9 W. A8 `Cache.initSize.l2Size = Cache.L2Size_32K;) Y( q+ Y) {; i) R" ?, d! _0 A
; D  B) r4 \. s3 f/ V2 L# r5 D: L4 u3 e% e
回复 支持 反对

使用道具 举报

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 */' W! X2 ~8 H; }+ w  V/ R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ F4 y0 _  ?( S0 t( Q* ^
var heapMemParams = new HeapMem.Params();$ C7 Q! k& H6 A  b8 u  h$ a
heapMemParams.size = 0x4000;
( ?9 G5 s; K% o. \' U0 ^: Y: _1 ]4 O: `6 t  o1 A
var Memory = xdc.useModule('xdc.runtime.Memory');) L( h6 Y3 N' B& s, `5 C& K5 e% z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 O3 v" H' r7 J" b0 R" b" Z

/ R" O+ M& a9 r) S& w+ X& z% y我大约calloc  每次共计大小为5K*16bits,# E5 J7 K! p9 C$ B
而默认配置才0x4000、需要改大。
/ O  v" Q9 a: n" R3 a/ w6 s+ p/ h5 p% c4 r  A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" u, s7 x# G# q$ ^1 t1 ~
Program.heap = 0;- w0 _; c4 K5 R. _1 k# `$ f
Program.argSize = 100;  /* minimum size */4 X8 M+ U' J  d+ i5 P2 H) D
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 04:51 , Processed in 0.041445 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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