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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& p1 P6 E* s! T- D
: x0 Y0 [# ~& F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; v1 T4 _  `* s3 k  Z3 Y" q
2 h( ?; v1 S0 h# ~6 h# b7 c6 |( w
其他程序段。。。。。
9 e3 M% h4 e% |9 y- g
( l8 I* e) F: y; U) I5 I1 y   free(x_d);5 B1 [1 g& [* y) s
- V9 L8 @: n5 [4 R% r
使用DSP侧单独调试功能,验证动态申请没有问题,/ Y$ b+ F: R  L

; `! d: e* E- [. e" t7 }* N1 ]: h2 |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 Y* @3 j1 ^" N

' L$ g) {* }+ `7 i1 E
" Z# ~3 \8 s, m) e! I* b! N# G
6 |8 L3 I6 S$ P! N" z) H$ h% b2 D
7 e$ c8 t) B  \& `9 d- |( d& }) d/ }$ r2 {

: m2 J: O$ B( _3 t7 G1 |7 g
* q/ Q" n8 A! w" [( {1 @* z2 d2 [; `
4 a2 i& U: J+ q& L: F) M; [$ `* o, N  W$ f
  n) H+ m0 i. l. R! z2 r% x4 o3 c' o
分享到:  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 */  m. x0 `! R8 Y9 H  Q1 X1 l
Program.heap = 0;; q0 w' ]' \' q. {) O
Program.argSize = 100;  /* minimum size */4 S4 J* ^4 I# N- O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 Q% n) ]2 |1 J* ]) [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 `( H4 y4 E: bvar heapMemParams = new HeapMem.Params();
. Q7 `, @* _; ]5 M7 |heapMemParams.size = 0x4000;
- v4 a+ N, A; T2 O+ c( R
) _; j3 \% P1 W+ }6 i3 nvar Memory = xdc.useModule('xdc.runtime.Memory');  Y- g+ O' l/ N, W5 S1 T: F: u4 R% a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- F+ a% H% C( H' Y+ e: v$ w& P- y
! C  t$ o2 H: j; M我大约calloc  每次共计大小为5K*16bits," o; `5 A1 u7 I0 N
而默认配置才0x4000、需要改大。
: S6 |5 ^0 ^; T% W, m0 R
7 j$ u( n- f& f& ^
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明  M0 L  H6 l- J9 j2 V. U; w/ f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 U7 t* c' `7 E! f( {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); K! X' D0 ~: j  K; G

. {: H! T$ t- Y" A: c是不是需要在DSP.CFG中进行配置
: O3 I, M4 f) W, Q' b! Z我现在的配置为: r% V0 X' h: S9 W

8 q6 L2 L. N- G  _* ^. K/*8 E% r% E3 T* j9 C9 A
*  ======== Operating System Configuration ========
! ]3 x& a2 y0 R+ P7 E& y+ b7 E */9 F9 u0 I% f: C( J
6 t. z# S$ J# o3 p* Q
/* no rts heap */
2 J" f( @. p& P1 dProgram.heap = 0;
: [- t, O& X5 L7 X. LProgram.argSize = 100;  /* minimum size */
9 O3 v8 e* ]6 T. {+ r5 mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 D6 o5 M/ D4 @7 v8 ]
2 H, c/ ]% }5 u1 l/* create a default heap */
; r  ^4 t! t/ X- S% n% ?3 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ r1 r9 B7 ^; d. C8 n7 v
var heapMemParams = new HeapMem.Params();
8 U( Y; ^1 D5 yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: K1 g" ]" Q# q6 \) w6 P- \, n2 b  P# Q
var Memory = xdc.useModule('xdc.runtime.Memory');: X7 f% x" Z2 g7 Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 {9 `0 L2 H: u1 Z* u' m. o: ^  j# T, ]# r
/* configure System module */' ~# z9 m& c2 \) a% M0 ?6 f. `5 q) Z- \
var SysMin = xdc.useModule('xdc.runtime.SysMin');' u! a$ i+ W/ {
SysMin.bufSize = 0x1000;
8 T) q+ u7 |2 |7 CSysMin.flushAtExit = false;
9 \+ o! q7 i1 t# s/ T$ a# h& u1 k) F, E7 T$ R  ^
var System = xdc.useModule('xdc.runtime.System');6 Y. V9 }* C: ^) b1 k! I) Z; a& y
System.SupportProxy = SysMin;
! c1 x+ s% @$ _* ]* a- \- w3 L  V7 B: {
/* configure SysBios to use the lower half of Timer 1 */& X( K. ]# n; z5 o4 m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% U0 k" Y% W* n6 Z7 j
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 n: h$ _: z2 w1 MTimer.timerSettings[1].master = true;
- l, e2 F3 N' BTimer.defaultHalf = Timer.Half_LOWER;
7 E3 t  {  Q& T: p# r. X5 YClock.timerId = 1;: |, o% m7 k7 F8 }$ J( k

- e2 l# i& c, O+ Y5 B9 m2 e8 c$ w* J( Y& o& S/ O5 o
/*; l7 j- A: Y3 V% x+ a( D0 T9 f
*  ======== Miscellaneous Configuration ========+ D% m% B1 O9 |) Z
*/3 ^/ U7 p9 x1 [* v4 Q

' B0 h3 _$ H& o/* set default diags mask */1 R+ V% Y5 u0 U- H3 L. i9 Y9 o0 V
var Diags = xdc.useModule('xdc.runtime.Diags');4 Z4 C) [$ f, V1 x8 S
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ I9 F6 E' e8 h9 l' [. Q" Y
; t# y, k9 e* i: U7 {4 p' f% Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 ]. }# l4 Z* u! MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" A2 `$ d( K/ M9 @. F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; [' Q( V/ F; c+ K; m& k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( n: ~) {" i; x2 q5 ~: Z: jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& c, s+ p# ^4 l0 {- hDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. @; w* |  F  {) X9 C% L" l! V: MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 a3 Z" X" g2 N% G1 x
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 z5 Y  a; `7 [; C- t# J9 K" C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' R" @: m1 q% ~  x6 B  `! F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 @' B1 H( d* D( l" O0 ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* Y5 q1 I2 {* q" y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 Z4 f0 ?6 ~5 y: q5 m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 a; @, J3 a4 J" o& j- r% KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  c. e- J: d9 {9 g+ R6 r" K8 ^! |
/* override diags mask for selected modules */
% o9 R4 V( N- Q+ p. Nxdc.useModule('xdc.runtime.Main');3 |4 H) c; z* [% L# S0 a
Diags.setMaskMeta(5 l  ?, l' w; Y8 l9 C
    "xdc.runtime.Main",
- Q7 ?! ~& I' k6 ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  r! C- Y+ Y- y; Z  p3 B    Diags.RUNTIME_ON: o+ c, h+ D7 P
);0 V3 z) i7 C# w  h0 m

4 `0 X6 m  L2 `% S! ]5 Mvar Registry = xdc.useModule('xdc.runtime.Registry');$ ~1 J5 c3 B, K; P1 f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( R; `. E. k8 ^- L6 C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; \- O* j% C4 s! v, ^Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ t+ Z1 C: T* r- t% s) qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' a+ l1 n4 R. }5 _
( V9 h8 Z7 B% A( j' F+ A6 X
/* create a logger instance */
: x( R0 S6 J- g& v! Q7 L6 X4 p' nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! L0 }: H8 B: T7 Y3 dvar loggerBufP = new LoggerBuf.Params();
4 d7 w: A: @  h* M! wloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: \1 D) E: M1 V1 N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% V$ O7 y) H# f1 w5 \! Y1 q# P7 x2 A" _* L" }, ?& i
var appLogger = LoggerBuf.create(loggerBufP);
+ w6 X7 ], c/ S, qappLogger.instance.name = "AppLog_Core1";( C+ L# I' Z  Q
Defaults.common$.logger = appLogger;: ]- E8 r: O) C
Memory.defaultHeapSize = 0x8192;   
8 B0 h' Y3 K( i3 W7 L6 WIdle.idleFxns[0] = "&LEDStatus";3 \2 c0 c2 Y8 ^. ]( G! D
Cache.initSize.l2Size = Cache.L2Size_32K;  G1 q: Y* D) B( j

. d0 S# ^5 U. d% G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-31 17:07 , Processed in 0.042852 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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