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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ \% E! [$ ?+ s) e: i5 n
7 C- \0 B" l  R* m  t    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( e/ r& H: ^  d
6 _' i/ f: Q8 g其他程序段。。。。。0 ]' _8 [9 s. C3 W* W% A

1 ~' c, p* v4 z/ }: U* W& r   free(x_d);
/ J7 Q- \' z  O" j3 b7 A2 p2 r9 |: w' Q6 O# \7 J
使用DSP侧单独调试功能,验证动态申请没有问题," F7 {' F1 p( ~- y6 l! e: [0 k
* i' X' d5 w, k0 v. j4 I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  g0 ^: l- K, i! G6 a" {% n
) }. c$ q. Q5 u8 _/ f% g

" t5 ~1 f: i5 e
5 ?6 S& y9 l0 P  O! v6 |/ U
8 t. N% L, ^+ N0 |0 w  }$ q
8 z) J& @! F5 Y9 w1 n- u  S1 Q
* C2 L$ b" o+ W5 Y7 {8 i' a' E5 @) V( G0 ?

0 k  F* p: k( j/ S- S
8 Y; g5 J7 U5 Y( c+ J1 C- @1 q( G1 s+ S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" b3 ^$ q3 m, n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 }: G% [. y7 d5 Q. W' `) B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 ?1 B  `9 T5 p
. L/ i. V' w+ c5 g+ o) A
是不是需要在DSP.CFG中进行配置
4 `* i& q% Q: a+ H; d我现在的配置为. p" M* W4 {5 S: P
+ y! @' J, k' [
/*7 P; u8 R: O0 y3 \! U; n4 I( R5 H
*  ======== Operating System Configuration ========2 L& B9 D2 k; `$ D1 |1 _) d
*/
, b4 v7 r' x: o  U" w
# B5 T* z6 U! b0 g( I6 }: T/* no rts heap */" c8 [% b% y/ q" e9 r% r
Program.heap = 0;
+ U+ ?6 @/ L! h8 A' i7 I9 ]Program.argSize = 100;  /* minimum size */" y( ]+ j0 }- X" o3 [+ z/ _
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 j9 ?6 K& g: `! {; `8 w3 t7 p
: C% z! X5 J% g- O
/* create a default heap */; n' W' A/ E$ Q; _0 {" h+ |& f  e# _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: }& i" T; z! _+ A: P; \
var heapMemParams = new HeapMem.Params();
/ ^$ O, g$ @4 V) N* PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ G8 r7 g+ ]% _' F+ K2 a: _- a; }1 Y1 O" J6 g  t  Z, j
var Memory = xdc.useModule('xdc.runtime.Memory');
) J! O1 M0 P" _# p/ \. }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 a0 T. i* ~* l9 X- {+ A
6 f/ w2 @' x, M6 p% k
/* configure System module */
7 n8 P+ J# J/ z( ?! ?var SysMin = xdc.useModule('xdc.runtime.SysMin');
! |6 y7 q0 R  {& ?+ HSysMin.bufSize = 0x1000;2 z; t( w( v) j, D$ ]
SysMin.flushAtExit = false;
6 `% ~' _$ n% [9 ^/ r& G. N$ _1 s5 v  u- Z
var System = xdc.useModule('xdc.runtime.System');
8 e- Z' x9 f2 n1 a* s) @1 Z  D4 d8 w3 zSystem.SupportProxy = SysMin;
' C7 i+ ]# i/ K9 U( L9 N
5 ]+ W8 |7 r8 E/* configure SysBios to use the lower half of Timer 1 */4 F) D* X5 ^& N6 v7 w0 |/ `- L
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 G2 X: O" ]% |& _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 V0 e! w3 @( F8 o( g; B( eTimer.timerSettings[1].master = true;' @' W9 T/ d  Z' w/ s
Timer.defaultHalf = Timer.Half_LOWER;$ B( V- c% b7 d6 n- q
Clock.timerId = 1;
, l; G' s+ t% ^) D9 O5 Z% K. g( K0 v

9 q6 r" |+ [6 p- P/*$ P- e" p- k: K+ q+ J
*  ======== Miscellaneous Configuration ========8 j' g7 o% L/ `& Y8 F$ n
*/
/ F1 k5 Z- g* x+ }
, z( I; s. i- R& f- X1 |/* set default diags mask */' \; f  u' v' P+ V# H, F
var Diags = xdc.useModule('xdc.runtime.Diags');
: G9 D* E8 h% d2 ~+ cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
! _: r7 g2 y2 y  u6 i# {7 u5 ^' P
: s. J! }) N0 V$ N! v, H$ YDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 t6 {7 i! U, u6 r; g: n" n- ^- q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& h1 V$ V) p' b& C  j! E
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, U8 z) w9 H! x! u) l4 x1 TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. R! Y% o3 ]; I" R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; u" Q, G0 {, w, A* ~$ \9 D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) i( }  p$ W# }0 H* O  W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ s3 @9 f; }4 H; S6 `5 K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 S. k1 x5 f: k- V1 Z& g# d) e4 }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 q* D; m7 T$ K3 W2 S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, e/ e  T1 f& NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( v3 S( c! b: i5 O$ {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( [+ C. _- x6 g* F9 r: q1 d* dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; D& @5 o- D- b- E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 t; t$ h# n/ E# n0 X; I4 O
% i( B' j* e! q
/* override diags mask for selected modules */5 C9 Z$ N2 M/ m4 t$ `. x9 `
xdc.useModule('xdc.runtime.Main');/ z6 h6 [, H! H! l; B
Diags.setMaskMeta(
' N$ y' D4 w  R8 g8 ~    "xdc.runtime.Main",
* j" R. r5 J. T5 |" Q4 E2 w. L    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* ^, O) M* H' j5 J    Diags.RUNTIME_ON
3 y. }# n$ d9 T3 k. U9 L);
0 X6 b- a" H3 Z: H- R7 }8 E
5 ]! k8 X1 k7 |* y% a8 b0 ]$ Y3 B) k7 vvar Registry = xdc.useModule('xdc.runtime.Registry');+ e. d$ o/ V( s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) d0 y+ y' z! T! ?$ x! q* V  e& {* MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 o9 _. }$ e  Z4 K8 G' {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 O2 m. _, Y5 ]( j0 q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ q- o2 r+ K1 l1 g. g, E
- @. A4 W4 x$ Z( y6 [
/* create a logger instance */
7 a" e, }/ s) W% o9 Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- m; h( X; ~. x' P. W
var loggerBufP = new LoggerBuf.Params();8 x0 ^( [! u; h) m" d% a$ {/ A. `/ ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) w  n( d/ x* U  c- X7 C' @+ GloggerBufP.bufType = LoggerBuf.BufType_FIXED;+ G* S% R4 ?* n& M4 J
' ^# F  z6 J4 y' E8 p
var appLogger = LoggerBuf.create(loggerBufP);; V+ g' r/ O1 h2 s6 f7 \% M6 q$ J2 [
appLogger.instance.name = "AppLog_Core1";- B" \8 [) r6 L" S% d- P1 o
Defaults.common$.logger = appLogger;/ s- j& h0 I( j0 l; O
Memory.defaultHeapSize = 0x8192;    / A' m. G- b. g! n( R9 ~" j8 Y9 K
Idle.idleFxns[0] = "&LEDStatus";
, {- X4 V. y+ l* aCache.initSize.l2Size = Cache.L2Size_32K;
& x+ O7 U* `9 f! y& @' e/ N0 R1 K; c- c" W
回复 支持 反对

使用道具 举报

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 J! Z1 g3 X' L! u3 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ V; A+ s: _: m- M, f
var heapMemParams = new HeapMem.Params();$ k  q6 T: }. t9 C8 J
heapMemParams.size = 0x4000;
7 b' M& f( w" b' ^
0 B1 l9 {* C: K9 Q( S; `var Memory = xdc.useModule('xdc.runtime.Memory');0 u, |; A5 T! o# @2 e5 y# C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. }, M" d+ _4 E4 p$ n: `2 r( A. ]) i
9 x1 H7 w) P9 m3 g. I我大约calloc  每次共计大小为5K*16bits,
. N) J' O1 ]# P而默认配置才0x4000、需要改大。
% i5 E8 k7 K8 G% D1 w  h1 Q
. }. @2 ~. Y1 Q' l" W" M- g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( k4 v- a4 s+ y, |7 N( ]Program.heap = 0;
7 E' v" Y3 p  LProgram.argSize = 100;  /* minimum size */
0 ~2 w8 S  x0 L2 |! 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-11-23 09:49 , Processed in 0.044773 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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